package br.com.salao.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.salao.bean.Cidade;
import br.com.salao.util.JpaUtil;


public class CidadeDaoImpl implements CidadeDao {

	private final GenericDao<Cidade> dao;

	public CidadeDaoImpl(EntityManager em){
		dao = new GenericDao<Cidade>(em, Cidade.class);
	}

	@Override
	public Cidade incluir(Cidade cidade) {
		return dao.salvar(cidade);	
	}
	
	public Cidade buscar(int idCidade) {
		
		EntityManager em = JpaUtil.getEntityManager();

		Cidade cidadeAux = null;
		try{
			Query query = em.createQuery("from Cidade c where c.id like :idCidade");
			query.setParameter("idCidade", idCidade);
			cidadeAux = (Cidade) query.getSingleResult();
		}catch (Exception e) {
			cidadeAux = null;
			e.printStackTrace();
		}finally{
			if(em != null){
				em.close();
			}
		}
		return cidadeAux;	
	}

	public Cidade buscarCidadePorNome(Cidade cidade){

		EntityManager em = JpaUtil.getEntityManager();

		Cidade cidadeAux = null;
		try{
			Query query = em.createQuery("from Cidade c where c.nome like :cidade");
			query.setParameter("cidade", cidade.getNome());
			cidadeAux = (Cidade) query.getSingleResult();
		}catch (Exception e) {
			cidadeAux = null;
		}finally{
			if(em != null){
				em.close();
			}
		}
		return cidadeAux;
	}

	@SuppressWarnings("unchecked")
	public List<Cidade> listarCidadePorIdEstado(int idEstado){
		
		EntityManager em =  JpaUtil.getEntityManager();
		List<Cidade> cidades = null;

		try {
			
			Query query = em.createQuery("from Cidade c where c.estado.id = :idEstado");
			query.setParameter("idEstado", idEstado);
			cidades = query.getResultList();
			
		} catch (Exception e) {
			e.printStackTrace();

		} finally {
			if(em != null)
				em.close();
		}
		return cidades;
	}

	@Override
	public List<Cidade> listar() {
		return dao.lista();
	}
	
}
